<!DOCTYPE html>
<html lang="en">
    <head>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            
            
            
            <link rel="shortcut icon" href="../../../img/favicon.ico">
        
        <script type="text/javascript" src="//game.bmob.cn/static/doc_union.js"></script>
            <title>Bmob文档中心</title>
            <link href="../../../css/bootstrap-custom.min.css" rel="stylesheet">
            <link href="../../../css/font-awesome-4.5.0.css" rel="stylesheet">
            <link href="../../../css/base.css" rel="stylesheet">
            <link rel="stylesheet" href="../../../css/highlight.css">
            <link href="../../../css/agate.css" rel="stylesheet">
            <link href="../../../css/custom.css" rel="stylesheet" id="custom">
    </head>

    <body >

        <div class="navbar navbar-fixed-top" role="navigation">
    <div class="main-nav">
        <!-- Collapsed navigation -->
        <div class="navbar-header">
            <a class="navbar-brand" href="../../..">
                <!--Bmob文档中心-->
                <img src="../../../img/logo.png" alt="">
            </a>
        </div>

        <!-- Expanded navigation -->
        <div class="navbar-collapse collapse">

          <ul class="nav navbar-nav">
            
              <li class="pull-left">
                
					<a href="../../..">文档首页</a>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="">数据服务</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">数据服务 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
								<li >
									<a href="../../../data/android/">Android</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/ios/">iOS</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/csharp/">C#</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/php/">PHP</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/go/">GO</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/restful/">RESTful</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/javascript/">JavaScript</a>
                                </li>
                            
                            
                                <li >
                                    <a href="../../../data/cocos2d_x/">Cocos2D-X</a>
                                </li>
							
                            
								<li >
									<a href="../../../data/wechat_app/">小程序</a>
                                </li>
                            
                            
                                <li >
                                    <a href="../../../data/wechat_app_new/">快应用</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../data/wechat_app_new/">Nodejs</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../data/wechat_app_new/">Cocos Creator</a>
                                </li>
							
                            
								<li >
									<a href="../../../data/wechat_app_new/rm/">小程序(新)</a>
                                </li>
                            
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="../../../cloud_function/android/">云函数</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">云函数 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
                                <li >
                                    <a href="../../../cloud_function/android/">Android</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/ios/">iOS</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/java/">Java</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/csharp/">C#</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/php/">PHP</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/javascript/">JavaScript</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/restful/">RESTful</a>
                                </li>
							
                            
								<li >
									<a href="../../../cloud_function/web/">Web</a>
                                </li>
                            
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="../../../sms/android/">短信服务</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">短信服务 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
                                <li >
                                    <a href="../../../sms/android/">Android</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../sms/ios/">iOS</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../sms/php/">PHP</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../sms/javascript/">JavaScript</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../sms/restful/">RESTful</a>
                                </li>
							
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left active">
                
					<!--<a href="">游戏实时后端</a>-->
					<li class="dropdown active">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">游戏实时后端 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
								<li class="active">
									<a href="../quick_start/">Unity</a>
                                </li>
                            
                            
								<li >
									<a href="../../cocos_creator/quick_start/">Cocos Creator</a>
                                </li>
                            
                            
								<li >
									<a href="../../wechat_games/quick_start/">微信小游戏</a>
                                </li>
                            
                            
                                <li >
                                    <a href="../../cloud_function/develop_doc/">云函数</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../classic_case/">经典案例</a>
                                </li>
							
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="">IM服务</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">IM服务 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
								<li >
									<a href="../../../im/android/">Android</a>
                                </li>
                            
                            
								<li >
									<a href="../../../im/ios/">iOS</a>
                                </li>
                            
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="../../../push/android/">推送服务</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">推送服务 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
                                <li >
                                    <a href="../../../push/android/">Android</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../push/ios/">iOS</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../push/php/">PHP</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../push/javascript/">JavaScript</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../push/restful/">RESTful</a>
                                </li>
							
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="../../../other/common_problem/">其他</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">其他 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
                                <li >
                                    <a href="../../../other/common_problem/">常见问题</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../other/error_code/">错误码</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../other/data_safety/">数据安全</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../other/bql/">BQL</a>
                                </li>
							
                        </ul>
                    </li>
                
              </li>
            
              <li>
                  <a href="https://www.bmob.cn/repository/index" target="_blank">知识库</a>
              </li>
              <li>
                  <a href="http://doc.bmob.cn/video/index.html" target="_blank">视频教程</a>
              </li>
            </ul>
            
        </div>
    </div>
</div>

        <div class="pagebody" id="main-wrapper">
            <div class="sidebar">
                <div class="bs-sidebar hidden-print affix well" role="complementary">

	
		
	
		
				
				
				
				
				
				
				
				
				
				
				
				
				
		
	
		
				
				
				
				
				
				
				
				
		
	
		
				
				
				
				
				
		
	
		
				
					<div class="code-title">Unity</div>
				
				
				
				
				
		
	
		
				
				
		
	
		
				
				
				
				
				
		
	
		
				
				
				
				
		
	


	<ul class="nav bs-sidenav">
		
			
		
			
		
			
		
			
		
			
				
					
						
							
								
									<li class="">
										<a class="itm-l1" href="../quick_start/">快速入门</a>
										
									</li>
								
									<li class="active">
										<a class="itm-l1" href="./">开发文档</a>
										
										<ul class="nav">
											
											<li class="active "><a href="#sdk">引入SDK</a>
												
											</li>
												
											<li class=""><a href="#sdk_1">初始化SDK</a>
												
											</li>
												
											<li class=""><a href="#_1">更新帧</a>
												
											</li>
												
											<li class=""><a href="#_2">注册房间动态监听器</a>
												
											</li>
												
											<li class=""><a href="#_3">注销房间动态监听器</a>
												
											</li>
												
											<li class=""><a href="#_4">创建房间</a>
												
											</li>
												
											<li class=""><a href="#_5">销毁房间</a>
												
											</li>
												
											<li class=""><a href="#_6">加入房间</a>
												
											</li>
												
											<li class=""><a href="#_7">离开房间</a>
												
											</li>
												
											<li class=""><a href="#_8">准备</a>
												
											</li>
												
											<li class=""><a href="#_9">取消准备</a>
												
											</li>
												
											<li class=""><a href="#_10">房主踢人</a>
												
											</li>
												
											<li class=""><a href="#_11">发送游戏交互信息</a>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_12">同步角色状态</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_13">发送瞬时信息</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_14">通知云函数</a></li>
												</ul>
												
											</li>
												
											<li class=""><a href="#_15">注册游戏运行监听器</a>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_16">监听游戏内的行为</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_17">监听我的角色状态</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_18">监听角色状态</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_19">监听瞬时信息</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_20">监听云函数通知</a></li>
												</ul>
												
											</li>
												
											<li class=""><a href="#_21">注销游戏运行监听器</a>
												
											</li>
												
											<li class=""><a href="#_22">注册游戏掉线监听器</a>
												
											</li>
												
											<li class=""><a href="#_23">注销游戏掉线监听器</a>
												
											</li>
												
											<li class=""><a href="#http">Http接口管理房间</a>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_24">创建房间</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_25">销毁房间</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_26">踢出玩家</a></li>
												</ul>
												
											</li>
												
											<li class=""><a href="#_27">附录</a>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_28">房间逻辑流程图</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_29">常量</a></li>
												</ul>
												
											</li>
												
										</ul>
										
									</li>
								
							
						
					
						
					
						
					
						
					
						
					
				
			
		
			
		
			
		
			
		
	</ul>
</div>
            </div>
            <div class="content" role="main">
                <div class="wrap">
                    

<h2 id="sdk">引入SDK<a class="headerlink" href="#sdk" title="Permanent link">&para;</a></h2>
<ul>
<li>下载 Unity SDK;</li>
<li>将 <strong>BmobGameUnitySDKvx.x.x_xxxxxx.unitypackage</strong> Import 到Unity内;</li>
</ul>
<h2 id="sdk_1">初始化SDK<a class="headerlink" href="#sdk_1" title="Permanent link">&para;</a></h2>
<p>在第一个场景的start方法中对SDK进行初始化，BGSAppKey在BGS游戏官网管理后台的游戏设置 &gt; 应用密钥。</p>
<pre><code>BmobGame.Init (this, BGSAppKey); // APPID
</code></pre>
<h2 id="_1">更新帧<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p>选一个贯穿全局的对象，在<strong>Update</strong>方法中调用下句。</p>
<pre><code>BmobGame.UpdateFrame ();
</code></pre>
<p>注意，没有此句，游戏将无法正常运行。</p>
<h2 id="_2">注册房间动态监听器<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<p>须在加入房间 JoinRoom <strong>之前</strong>注册，才能保证不遗漏房间信息。</p>
<pre><code>// action: 事件编号，见文档最下方常量的房间动态监听器 action 类型 
// no: 事件所属玩家编号
// data: 相关数据
void OnRoomAction(int action, int no, string userId, JSONNode data){
    // TODO 对事件做出相应处理
}

this.mRoomActListener = new BmobGame.RoomActionListener (OnRoomAction);// 保存起来，注销时要用
BmobGame.RegistRoomActListener(this.mRoomActListener);
</code></pre>
<h2 id="_3">注销房间动态监听器<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h2>
<p>一般在房间场景销毁时注销房间动态监听器，在进入游戏场景时需要再重新注册此监听。</p>
<pre><code>void OnDestroy ()
{
    BmobGame.UnregistRoomActListener (this.mRoomActListener);
}
</code></pre>
<h2 id="_4">创建房间<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h2>
<p>创建房间之前一定要先设置 UserId ，否则将失败。（关于UserId，建议使用Bmob数据sdk的用户体系）
playerCount 为需要设定的房间人数。</p>
<pre><code>BmobGame.UserId = userId;

// code: 200为成功，否则失败，详见&lt;错误码&gt;
// err : 错误原因
// address : 服务器ip地址，JoinRoom时需要传入
// port : 服务器端口号，JoinRoom时需要传入
// roomId : 房间号，JoinRoom时需要传入
// masterKey : 房间管理员密钥
// joinKey : 房间加入密钥，JoinRoom时需要传入
void OnCreateRoom(int code, string err, string address, int port, int roomId, string masterKey, string joinKey){
    // TODO 记录返回的信息
}

BmobGame.CreateRoom (this, playerCount, new                     BmobGame.CreateRoomListener (OnCreateRoom));
</code></pre>
<p>创建房间成功时，服务器会自动调用云函数 Room.java 的 <strong>onCreate</strong> 方法。</p>
<h2 id="_5">销毁房间<a class="headerlink" href="#_5" title="Permanent link">&para;</a></h2>
<p>房间创建后不用时需要销毁，否则会占用服务器资源，会对其它正常游戏中的房间造成一定的影响。</p>
<p>不推荐从客户端SDK调用此接口销毁房间，而是在云函数判断情况来销毁房间，例如《吃鸡》战斗结束一分钟后房间会自动销毁，以避免客户端异常状况导致房间资源未被释放。</p>
<p><em>以下是客户端调用销毁房间方法</em></p>
<pre><code>// code: 200为成功，否则失败，详见&lt;错误码&gt;
// msg : 详情
void CallBack(int code, string msg){
    // TODO UI反馈
}
BmobGame.DestroyRoom(int roomId, String MasterKey, new BmobGame.OperationListener(CallBack));
</code></pre>
<p>销毁房间成功时，会自动调用云函数 Room.java 的 <strong>onDestroy</strong> 方法。</p>
<p><em>云函数销毁房间，请参考云函数文档</em></p>
<h2 id="_6">加入房间<a class="headerlink" href="#_6" title="Permanent link">&para;</a></h2>
<p>加入房间时，需传入创建房间时回调的参数。</p>
<pre><code>// code: 200为成功，否则失败，详见&lt;错误码&gt;
// err : 错误原因
// data : 房间信息 &gt;
//      玩家编号： data["no"];
//      玩家数： data["playerCount"];
//      是否在游戏中： data["isPlaying"];
//      房间全部玩家信息： JSONArray players = data ["players"].AsArray;
//          每一个玩家信息包括： 玩家编号：no；玩家id：userId；玩家状态：status，见文档最下方常量的玩家状态类型
void OnJoinRoom(int code, string err, JSONNode data){
    // TODO 处理、保存房间数据
}

// address : 服务器ip地址
// port : 服务器端口号
// roomId : 房间号
// joinKey : 房间加入密钥
BmobGame.JoinRoom(address, port, roomId, joinKey, new BmobGame.JoinRoomListener (OnJoinRoom))
</code></pre>
<p>加入房间成功时，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong> 收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onJoin</strong> 方法。</p>
<h2 id="_7">离开房间<a class="headerlink" href="#_7" title="Permanent link">&para;</a></h2>
<pre><code>BmobGame.QuitRoom();
</code></pre>
<p>离开房间成功时，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong> 收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onLeave</strong> 方法。</p>
<h2 id="_8">准备<a class="headerlink" href="#_8" title="Permanent link">&para;</a></h2>
<pre><code>BmobGame.ReadyAtRoom ();
</code></pre>
<p>成功提交准备后，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong>收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onReady</strong> 方法。
当房间人满且全部人员都准备后，服务器会自动开始游戏（想主动开始，可调用云函数的 room.dispatchGameStart() 方法）。此时所有玩家会在房间动态监听器 <strong>RoomActionListener</strong>收到该事件通知，云函数 Player.java 的 <strong>onGameStart</strong>会被调用。</p>
<h2 id="_9">取消准备<a class="headerlink" href="#_9" title="Permanent link">&para;</a></h2>
<pre><code>BmobGame.UnReadyAtRoom ();
</code></pre>
<p>成功提交取消准备后，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong>收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onUnready</strong> 方法。</p>
<h2 id="_10">房主踢人<a class="headerlink" href="#_10" title="Permanent link">&para;</a></h2>
<p>建议不调用此接口，而是用通知云函数的方式踢出玩家，这样做的好处是可以在踢出时做一些工作，例如重置被踢玩家的属性。</p>
<pre><code>// code: 200为成功，否则失败，详见&lt;错误码&gt;
// msg : 详情
void CallBack(int code, string msg){
    // TODO UI反馈
}

// masterKey : 房间管理员密钥
// no: 被踢玩家编号
BmobGame.KickPlayer (string masterKey,int no, new BmobGame.OperationListener(CallBack));
</code></pre>
<p>成功踢出该玩家后，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong>收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onKicked</strong> 方法。</p>
<hr />
<h2 id="_11">发送游戏交互信息<a class="headerlink" href="#_11" title="Permanent link">&para;</a></h2>
<h3 id="_12">同步角色状态<a class="headerlink" href="#_12" title="Permanent link">&para;</a></h3>
<p>将处理事件转发的脚本绑定给本地角色Player，例如将Player的移动、旋转等数据，调用SDK接口同步到服务器。
通过 <strong>BmobGame.OthersGameStatusListener</strong> 能监听到所有玩家的状态。</p>
<pre><code>// name： 配置在游戏管理后台的玩家属性名
// value： 状态值，类型可以是boolean、int、float、double、boolean[]、int[]、float[]、double[]
BmobGame.EditMyStatus(string name, object value);
</code></pre>
<h3 id="_13">发送瞬时信息<a class="headerlink" href="#_13" title="Permanent link">&para;</a></h3>
<p>这是玩家之间交互数据，通过 <strong>BmobGame.TransferListener</strong> 能收到其他玩家发送的数据。
 信息为byte数组形式，建议把数组的第一位作为自定义的交互事件类型flag，后面的为要交互的数据。</p>
<pre><code>BmobGame.SendTransferToAllExceptSelf(byte[] bs);
</code></pre>
<p>​  <br />
​    </p>
<h3 id="_14">通知云函数<a class="headerlink" href="#_14" title="Permanent link">&para;</a></h3>
<p>调用云函数代码，action 为云函数中的方法名，content 为传入该云函数方法的参数，byte[]类型。
例如action传入A，则对应云函数 Play.java 中的 onAction_A 方法。</p>
<pre><code>BmobGame.CloudAction(string action, byte[] content);
</code></pre>
<hr />
<h2 id="_15">注册游戏运行监听器<a class="headerlink" href="#_15" title="Permanent link">&para;</a></h2>
<pre><code>BmobGame.SetGameRuntimeListeners (
    new BmobGame.GameInfoListener (OnGameInfo), // 监听的是在游戏内的行为
    new BmobGame.MyGameStatusListener (OnMyGameStatus), // 监听我的角色状态
    new BmobGame.OthersGameStatusListener (OnOthersGameStatus), //监听角色状态
    new BmobGame.TransferListener (OnTransfer), //监听瞬时信息
    new BmobGame.CloudNotifyListener (OnCloudNotify) //监听云函数通知
);
</code></pre>
<p>批量注册游戏运行监听器，具体每个监听器方法见下方。</p>
<h3 id="_16">监听游戏内的行为<a class="headerlink" href="#_16" title="Permanent link">&para;</a></h3>
<p>返回的是在游戏内的行为，例如掉线、战斗开始、战斗结束等（使用频率较低）</p>
<pre><code>// action：行为类型，见文档最下方常量的游戏内的 action 类型
// fromNo：信息所属玩家的编号
// data：类型为 PlayerGameAction_Reconn 时，data传入 startTime 和 playerCount
void OnGameInfo (int action, int fromNo, string userId, JSONNode data)
{
    Debug.Log ("Receive game info: no[" + no + "] userid[" + userId + "], action = " + action);
}
</code></pre>
<h3 id="_17">监听我的角色状态<a class="headerlink" href="#_17" title="Permanent link">&para;</a></h3>
<p>读取服务器同步的数据，例如可通知我的死活、分数。</p>
<pre><code>// attrNames： 我变化的属性值列表
// status： 状态值
void OnMyGameStatus (ArrayList attrNames, Hashtable status)
{
    if (attrNames.Contains ("isdead")) {
        if ((bool)(status ["isdead"])) {
            Debug.Log ("当前玩家已经死亡，状态通知及时");
        }
    }
    if (attrNames.Contains ("score")) {
        SharedValues_Script.Score = (int)(status ["score"]);
    }
}
</code></pre>
<h3 id="_18">监听角色状态<a class="headerlink" href="#_18" title="Permanent link">&para;</a></h3>
<p>读取服务器同步的数据，例如可渲染其它玩家的位置、角度。</p>
<pre><code>// fromNo：信息所属玩家的编号
// attrNames： 更改的属性值列表
// status： 状态值
void OnOthersGameStatus (int fromNo, ArrayList attrNames, Hashtable status)
{
    Debug.Log ("Player[" + no + "] game status is changed: " + status.Count);

    if(attrNames.Contains("position")){
        float[] position = status ["position"] as float[];
        mOtherPlayers [no].GetComponent&lt;Player2Movement&gt; ().MoveTo (position [0], position [1]) ;
    }
    if(attrNames.Contains("rotation")){
        float y = (float)(status ["rotation"]);
        mOtherPlayers [no].GetComponent&lt;Player2Movement&gt; ().TurnTo (y) ;
    }
}
</code></pre>
<h3 id="_19">监听瞬时信息<a class="headerlink" href="#_19" title="Permanent link">&para;</a></h3>
<p>获取其它玩家发送的瞬时信息，作出相应处理。</p>
<pre><code>// fromNo：信息所属玩家的编号
// data：发送过来的数据，一般定第一位为flag
void OnTransfer (int fromNo, byte[] data)
{
    Debug.Log ("Get transfer data flag = " + data[0] + " &amp; len = " + data.Length + " &amp; from: " + fromNo);
    // TODO 根据flag做出相应处理
}
</code></pre>
<h3 id="_20">监听云函数通知<a class="headerlink" href="#_20" title="Permanent link">&para;</a></h3>
<pre><code>//对收到云函数通知的处理,notify为byte[]
void OnCloudNotify(byte[] notify){
    Debug.log('onCloudNotify: ' + notify[0]);
    // TODO 对相应flag做出相应处理      
}
</code></pre>
<p>顺便一提，仅当云函数调用以下方法时，客户端才会通过 BmobGame.CloudNotifyListener 收到通知。</p>
<pre><code>player.send
player.sendToAll
player.sendToOthers

room.sendToAll
room.sendToAllExcept(content, player)
</code></pre>
<h2 id="_21">注销游戏运行监听器<a class="headerlink" href="#_21" title="Permanent link">&para;</a></h2>
<p>一般在游戏场景销毁时，注销游戏运行监听器。</p>
<pre><code>void OnDestroy ()
{
    BmobGame.StopGameRuntimeListener (); 
}
</code></pre>
<hr />
<h2 id="_22">注册游戏掉线监听器<a class="headerlink" href="#_22" title="Permanent link">&para;</a></h2>
<pre><code>void OnOffline ()
{
    // TODO 进行掉线通知及处理
}
this.mOfflineListener = new BmobGame.OfflineListener (OnOffline);// 保存起来，注销时要用
BmobGame.RegistOfflineListener (this.mOfflineListener);
</code></pre>
<h2 id="_23">注销游戏掉线监听器<a class="headerlink" href="#_23" title="Permanent link">&para;</a></h2>
<p>一般在游戏场景销毁时，注销游戏掉线监听器。</p>
<pre><code>void OnDestroy ()
{
    BmobGame.UnregistOfflineListener (this.mOfflineListener); 
}
</code></pre>
<hr />
<h2 id="http">Http接口管理房间<a class="headerlink" href="#http" title="Permanent link">&para;</a></h2>
<h3 id="_24">创建房间<a class="headerlink" href="#_24" title="Permanent link">&para;</a></h3>
<ul>
<li><code>Url</code>:  <strong>https://gameapi.bmob.cn/client/room?oper=create</strong></li>
<li><code>Headers</code>: </li>
</ul>
<pre><code>    X-BGS-VER = 1
    X-BGS-ID = 官网后台-应用密钥-AppKey
    Content-Type: application/json
</code></pre>

<ul>
<li><code>Body</code>:</li>
</ul>
<pre><code>    {
        &quot;userId&quot;: &quot;房主Id&quot;,
        &quot;playerCount&quot;: 房间人数
    }
</code></pre>

<ul>
<li>返回值：</li>
</ul>
<pre><code>成功：
    {
        &quot;code&quot;: 200,
        &quot;data&quot;: {
            &quot;address&quot;: &quot;服务器地址&quot;,
            &quot;roomInfo&quot;: {
                &quot;joinKey&quot;: &quot;加入房间需要的key&quot;,
                &quot;masterKey&quot;: &quot;销毁房间、踢人需要的key&quot;,
                &quot;ports&quot;: {
                    &quot;tcp&quot;: tcp通信端口,
                    &quot;udp&quot;: udp通信端口,
                    &quot;websocket&quot;: web socket通信端口
                },
                &quot;rid&quot;: 房间号
            }
        }
    }
失败：
    {
        &quot;code&quot;: xxx,
        &quot;data&quot;: &quot;错误原因&quot;
    }
</code></pre>

<h3 id="_25">销毁房间<a class="headerlink" href="#_25" title="Permanent link">&para;</a></h3>
<p>请求到
- <code>Url</code>:  <strong>https://gameapi.bmob.cn/client/room?oper=destroy</strong>
- <code>Headers</code>: </p>
<pre><code>    X-BGS-VER = 1
    X-BGS-ID = 官网后台-应用密钥-AppKey
    Content-Type: application/json
</code></pre>

<ul>
<li><code>Body</code>:</li>
</ul>
<pre><code>    {
        &quot;roomId&quot;: 房间号,
        &quot;userId&quot;: &quot;房主Id&quot;,
        &quot;address&quot;: &quot;创建房间时返回的服务器地址&quot;,
        &quot;masterKey&quot;: &quot;创建房间时返回的房间masterKey&quot;
    }
</code></pre>

<ul>
<li>返回值：</li>
</ul>
<pre><code>成功：
    {
        &quot;code&quot;: 200,
        &quot;data&quot;: &quot;OK&quot;
    }
失败：
    {
        &quot;code&quot;: xxx,
        &quot;data&quot;: &quot;错误原因&quot;
    }
</code></pre>

<h3 id="_26">踢出玩家<a class="headerlink" href="#_26" title="Permanent link">&para;</a></h3>
<p>请求到
- <code>Url</code>:  <strong>https://gameapi.bmob.cn/client/room?oper=kick</strong>
- <code>Headers</code>: </p>
<pre><code>    X-BGS-VER = 1
    X-BGS-ID = 官网后台-应用密钥-AppKey
    Content-Type: application/json
</code></pre>

<ul>
<li><code>Body</code>:</li>
</ul>
<pre><code>    {
        &quot;roomId&quot;: 房间号,
        &quot;userId&quot;: &quot;房主Id&quot;,
        &quot;address&quot;: &quot;创建房间时返回的服务器地址&quot;,
        &quot;masterKey&quot;: &quot;创建房间时返回的房间masterKey&quot;,
        &quot;playerNo&quot;: 需要踢出的玩家的座位号
    }
</code></pre>

<ul>
<li>返回值：</li>
</ul>
<pre><code>成功：
    {
        &quot;code&quot;: 200,
        &quot;data&quot;: &quot;OK&quot;
    }
失败：
    {
        &quot;code&quot;: xxx,
        &quot;data&quot;: &quot;错误原因&quot;
    }
</code></pre>

<h2 id="_27">附录<a class="headerlink" href="#_27" title="Permanent link">&para;</a></h2>
<h3 id="_28">房间逻辑流程图<a class="headerlink" href="#_28" title="Permanent link">&para;</a></h3>
<p><img alt="此处输入图片的描述" src="http://bmob-cdn-15075.b0.upaiyun.com/2018/05/21/2812fc16409b2ab18070b26e228a91d2.png" /></p>
<h3 id="_29">常量<a class="headerlink" href="#_29" title="Permanent link">&para;</a></h3>
<h4 id="action">房间动态监听器 action 类型<a class="headerlink" href="#action" title="Permanent link">&para;</a></h4>
<table>
<thead>
<tr>
<th align="center">名称</th>
<th align="center">含义</th>
<th align="center">备注</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">PlayerRoomAction_Join</td>
<td align="center">玩家加入</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Leave</td>
<td align="center">玩家离开</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Offline</td>
<td align="center">玩家掉线</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Reconn</td>
<td align="center">玩家重连</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Ready</td>
<td align="center">玩家准备</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Unready</td>
<td align="center">玩家取消准备</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Kicked</td>
<td align="center">玩家被踢出</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_GameOver</td>
<td align="center">游戏结束，云函数调用room.dispatchGameOver()时</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">RoomAction_Start</td>
<td align="center">房间满人且全部已准备时</td>
<td align="center">data传入当前时间，单位毫秒：data ["nowTime"]</td>
</tr>
</tbody>
</table>
<h4 id="_30">玩家状态类型<a class="headerlink" href="#_30" title="Permanent link">&para;</a></h4>
<table>
<thead>
<tr>
<th align="center">名称</th>
<th align="center">含义</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">PlayerStatus_NoBody</td>
<td align="center">该位置上尚无玩家</td>
</tr>
<tr>
<td align="center">PlayerStatus_Waitting</td>
<td align="center">该位置上有玩家，在等待中，尚未准备</td>
</tr>
<tr>
<td align="center">PlayerStatus_Ready</td>
<td align="center">该位置上有玩家，已经准备了</td>
</tr>
<tr>
<td align="center">PlayerStatus_Playing</td>
<td align="center">该位置上有玩家，已经在游戏中</td>
</tr>
<tr>
<td align="center">PlayerStatus_GameOut</td>
<td align="center">该位置上有玩家，已经在游戏中被淘汰</td>
</tr>
<tr>
<td align="center">PlayerStatus_Offline</td>
<td align="center">该位置上有玩家，已经在游戏中，但是掉线了</td>
</tr>
</tbody>
</table>
<h4 id="action_1">游戏内的 action 类型<a class="headerlink" href="#action_1" title="Permanent link">&para;</a></h4>
<table>
<thead>
<tr>
<th align="center">名称</th>
<th align="center">含义</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">PlayerGameAction_Offline</td>
<td align="center">玩家游戏中掉线</td>
</tr>
<tr>
<td align="center">PlayerGameAction_Reconn</td>
<td align="center">玩家游戏中重连</td>
</tr>
<tr>
<td align="center">PlayerGameAction_GameLose</td>
<td align="center">玩家失败</td>
</tr>
</tbody>
</table>
                </div>
            </div>
        </div>

        
            <script>var base_url = '../../..';</script>
            <script src="../../../js/jquery-1.10.2.min.js"></script>
            <script src="../../../js/bootstrap-3.0.3.min.js"></script>
            <script src="../../../js/highlight.pack.js"></script>
            <script src="../../../js/main.js"></script>
            <script src="../../../js/base.js"></script>

        <div id="go-top"><i class="fa fa-chevron-up"></i></div>
        <a href="https://docs.bmob.cn/data/Android/a_faststart/doc/index.html" id="back" target="_blank">返回 <br> 旧版</a>
    </body>

</html>